package com.zy.ems.common.page;

/**
 * 分页查询对象创建类。
 * 
 * @author Luffy
 *
 */
public class PageQueryBuilder {
    static final PageQuery DEFAULT = new PageQuery(1,
            PageQuery.DEFAULT_PAGE_SIZE);

    /**
     * 分页查询对象
     */
    private PageQuery pageQuery;

    private PageQueryBuilder() {
        this.pageQuery = new PageQuery();
    }

    public static PageQueryBuilder instance() {
        return new PageQueryBuilder();
    }

    /**
     * 设置页码。
     * 
     * @param page
     * @return
     */
    public PageQueryBuilder page(int page) {
        this.pageQuery.setPage(page);
        return this;
    }

    /**
     * 设置偏移量。
     * 
     * @param offset
     * @return
     */
    public PageQueryBuilder offset(int offset) {
        this.pageQuery.setOffset(offset);
        return this;
    }

    /**
     * 设置分页大小。
     * 
     * @param pageSize
     * @return
     */
    public PageQueryBuilder pageSize(int pageSize) {
        this.pageQuery.setPageSize(pageSize);
        return this;
    }

    /**
     * 构建分页条件，页码和偏移量参数都有效时以页码为分页条件；都无效时设置默认值，页码：1，偏移量：0。
     * 
     * @return
     */
    public PageQuery build() {
        Integer page = this.pageQuery.getPage();
        Integer offset = this.pageQuery.getOffset();
        if (page != null) {
            this.pageQuery.setOffset((page - 1) * this.pageQuery.getPageSize());
        }
        else if (offset != null) {
            this.pageQuery.setPage(offset / this.pageQuery.getPageSize() + 1);
        }
        else {
            return DEFAULT;
        }
        return this.pageQuery;
    }
}
